package com.telecom.service;

import com.telecom.common.convention.result.PageDTO;
import com.telecom.pojo.dto.admin.employee.ModifyEmployeeDTO;
import com.telecom.pojo.dto.admin.user.UserPageQueryRequestDTO;
import com.telecom.pojo.dto.admin.user.UserRechargeRequestDTO;
import com.telecom.pojo.dto.user.user.UserLoginRequestDTO;
import com.telecom.pojo.dto.user.user.UserUpdateRequestDTO;
import com.telecom.pojo.dto.user.user.UserChangePasswordRequestDTO;
import com.telecom.pojo.vo.admin.user.UserDetailVO;
import com.telecom.pojo.vo.admin.user.UserPageVO;
import com.telecom.pojo.vo.user.user.UserInfoVO;
import com.telecom.pojo.vo.user.user.UserLoginResponseVO;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 用户登录
     * 
     * @param loginRequest 登录请求参数
     * @return 登录响应信息
     */
    UserLoginResponseVO login(UserLoginRequestDTO loginRequest);

    
    /**
     * 获取用户个人信息
     * 
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfoVO getUserInfo(Long userId);
    
    /**
     * 更新用户个人信息
     *
     * @param updateRequest 更新请求参数
     */
    void updateUserInfo(UserUpdateRequestDTO updateRequest);
    
    /**
     * 修改用户密码
     * 
     * @param changePasswordRequest 修改密码请求参数
     */
    void changePassword(UserChangePasswordRequestDTO changePasswordRequest);

    // ==================== 管理端方法 ====================
    
    /**
     * 用户分页查询
     * 
     * @param queryRequest 查询参数
     * @return 用户列表分页结果
     */
    PageDTO<UserPageVO> getUserPage(UserPageQueryRequestDTO queryRequest);
    
    /**
     * 根据ID查询用户详细信息
     * 
     * @param id 用户ID
     * @return 用户详细信息
     */
    UserDetailVO getUserDetailById(Long id);
    
    /**
     * 启用、禁用用户账号
     * 
     * @param status 状态，1为启用 0为禁用
     * @param id 用户ID
     */
    void updateUserStatus(Integer status, Long id);
    
    /**
     * 编辑用户信息
     * 
     * @param modifyEmployeeDTO 用户信息
     */
    void updateUser(ModifyEmployeeDTO modifyEmployeeDTO);
    
    /**
     * 用户充值
     * 
     * @param rechargeRequest 充值请求参数
     */
    void rechargeUser(UserRechargeRequestDTO rechargeRequest);
}